package top.huntwolf.admin.service;

import com.auth0.jwt.exceptions.JWTDecodeException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import top.huntwolf.admin.common.enums.BookConditionEnum;
import top.huntwolf.admin.common.enums.CodeMsg;
import top.huntwolf.admin.dao.*;
import top.huntwolf.admin.exception.ServiceException;
import top.huntwolf.admin.pojo.Cart;
import top.huntwolf.admin.pojo.CartItem;
import top.huntwolf.admin.pojo.orderEntity.OrderBook;
import top.huntwolf.admin.utils.TokenUtil;
import top.huntwolf.admin.utils.UUIDUtil;

import java.util.ArrayList;
import java.util.List;

@Service
@Transactional
public class CartService {

    @Autowired
    private CartItemDao cartItemDao;

    @Autowired
    private CartDao cartDao;


    public void addItem(List<CartItem> items){
        if (items.isEmpty()){
            throw new ServiceException(CodeMsg.BIND_ERROR.fillArgs("商品项不能为空"));
        }
        for (CartItem item : items) {
            item.setCartId(cartDao.selectCart(TokenUtil.getTokenOpenId()).getCartId());
            item.setConditionEnum(BookConditionEnum.getConditionByDesc(item.getBookCondition()));
            if(cartItemDao.selectRepeatItem(item)!=null){
                throw new ServiceException(CodeMsg.REPEATED_CART_ITEM.fillArgs("该购物车项目已存在"));
            }
        }

        int result = cartItemDao.addItems(items);
        if (result == 0){
            throw new ServiceException(CodeMsg.ITEM_INSERT_FAIL);
        }

    }

    public void deleteItem(int itemId) {
        int result = cartItemDao.deleteItem(itemId);
        if (result == 0){
            throw new ServiceException(CodeMsg.ITEM_DELETE_FAIL);
        }
    }

    public void clearItems(){
        Cart Cart = cartDao.selectCart(TokenUtil.getTokenOpenId());
        cartItemDao.clearItems(Cart.getCartId());
    }

    public List<CartItem> queryCartItems() {
        String token = "";
        try {
            token = TokenUtil.getTokenOpenId();
        }catch (NullPointerException | JWTDecodeException e){
            //没有登录
            return null;
        }
        if(cartDao.selectCart(TokenUtil.getTokenOpenId()) == null){
            cartDao.insert(new Cart(UUIDUtil.getCartID(18),TokenUtil.getTokenOpenId(),null,null));
        }
        Cart cart = cartDao.selectCartWithItems(TokenUtil.getTokenOpenId());
        if (cart != null){
            return cart.getItems() != null?cart.getItems():new ArrayList<CartItem>();
        }

        return new ArrayList<CartItem>();

    }

    public void updateCartItems(List<CartItem> items){
        if (items.isEmpty()){
            throw new ServiceException(CodeMsg.BIND_ERROR.fillArgs("商品项信息不能为空"));
        }
            for (CartItem item : items) {
                item.setCartId(cartDao.selectCart(TokenUtil.getTokenOpenId()).getCartId());
                CartItem cartItem = cartItemDao.selectRepeatItem(item);
                if(cartItem!=null){
                    item = cartItem;
                    item.setNum(cartItem.getNum()+item.getNum());
                }
            }
            cartItemDao.updateItems(items);

    }

    //清除已生成订单的购物车
    public void ClearSubmit(List<OrderBook> orderBooks){
        Cart cart = cartDao.selectCart(TokenUtil.getTokenOpenId());

        List<CartItem> cartItems = new ArrayList<>();
        for (OrderBook orderBook : orderBooks){
            CartItem cartItem = new CartItem();
            cartItem.setIsbn(orderBook.getIsbn());
            cartItem.setCartId(cart.getCartId());
            cartItems.add(cartItem);
        }
        cartItemDao.deleteItemsByIsbn(cartItems);
    }




}
